;#############################
;命令：
;nasm -f elf64 day2_0function_1call_function_with_multiple_parameters_1pro.asm -o main.o && gcc main.o -o main -lc -no-pie && ./main
;输出：
;传入参数为：1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
;传入参数为：1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
;#############################
extern printf

section .data
	msg: db `传入参数为：%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n`, 0

section .text
	global main

main:
	push rbp
	mov rbp, rsp

;###########################################
	;这个例子讲
	;如果stack未完成对齐
	;那么下一个打印语句即便自身是对齐的
	;也将会出现段错误
	;可以尝试将两个数字改错
	;来看一下影响
	;sub rsp, x
	;add rsp, y
	;随便改x或y，使得y - x != 56
	sub rsp, 8
	push 12
	push 11
	push 10
	push 9
	push 8
	push 7
	push 6
	mov r9, 5
	mov r8, 4
	mov rcx, 3
	mov rdx, 2
	mov rsi, 1
	mov rdi, msg
	call printf

	add rsp, 64
;###########################################

;#######################
	sub rsp, 8
	push 12
	push 11
	push 10
	push 9
	push 8
	push 7
	push 6
	mov r9, 5
	mov r8, 4
	mov rcx, 3
	mov rdx, 2
	mov rsi, 1
	mov rdi, msg
	call printf

	add rsp, 64
;#######################

	mov eax, 0
	leave
	ret
